package com.hengpeng.itfin.service;

import java.util.List;

import com.hengpeng.common.exception.ServiceResult;
import com.hengpeng.itfinbase.message.ResponseMessage;
import com.hengpeng.itfinbase.message.userInfo.SendEmailRequest;
import com.hengpeng.itfinbase.persist.EmailLog;
import com.hengpeng.itfinbase.persist.EmailLog.EmailType;
import com.hengpeng.itfinbase.persist.VerifyCode.VerifyType;

public interface EmailService
{

	/**
	 * <pre>
	 * 获取没有发送的邮件对象(按级别进行排序)
	 * </pre>
	 * @param count 一次性抓取数量
	 * @return
	 */
	public List<EmailLog> findEmailForNotSend(int count);

	/**
	 * <pre>
	 * 确认邮件,找回密码
	 * </pre>
	 * @param username 用户名
	 * @param verifyCode 验证码
	 * @param type 验证码类型
	 * @return
	 */
	public ServiceResult<Boolean> findPassAffirmByEmail(String username, String verifyCode, VerifyType type);

	/**
	 * <pre>
	 *  确认邮件  邮件订阅
	 * </pre>
	 * @param url
	 * @param storeId
	 * @param betCardNo
	 * @param username
	 * @param email
	 * @param type
	 * @return
	 */
	public ServiceResult<Boolean> sendSubscribeActive(String url, String storeId, String betCardNo, String username,
			String email, VerifyType type);

	/**
	 * <pre>
	 *  确认订阅邮件
	 * </pre>
	 * @param username
	 * @param verifyCode
	 * @param type
	 * @return
	 */
	public ServiceResult<Boolean> subScribeAffirmByEmail(String username, String verifyCode, VerifyType type);

	/**
	 * <pre>
	 * 确认邮件,完成注册
	 * </pre>
	 * @param username
	 * @param verifyCode
	 * @return
	 *//*
	public ServiceResult<WebUser> registerAffirmByEmail(String username, String verifyCode);
*/
	/**
	 * <pre>
	 * 重置所有邮件（正在发送中状态改为未发送）
	 * </pre>
	 * @return
	 */
	public int resetAllEmailForSending();

	/**
	 * <pre>
	 *  发送邮件(此方法只向邮件表里插入一条数据)
	 *  没有具体的业务，只是进行邮件发送
	 * </pre>
	 * @param type 类型
	 * @param sendLevel 级别(值越大越优先)
	 * @param storeId 接收者的会员店ID
	 * @param toEmail 接收者
	 * @param title 标题
	 * @param content 内容
	 * @return
	 */
	public boolean sendEmail(EmailType type, int sendLevel, String storeId, String toEmail, String title, String content);

	/**
	 * <pre>
	 * 发送用户找回密码激活邮件
	 * </pre>
	 * @param url 原始URL(如:http://www.81666.net/findPassActivate)
	 * @param storeId 会员店ID
	 * @param betCardNo 投注卡号
	 * @param username 注册用户名
	 * @param email 用户email
	 * @param type 验证码类型
	 * @return
	 */
	public ServiceResult<Boolean> sendfindPassActive(String url, String storeId, String betCardNo, String username,
			String email, VerifyType type);

	/**
	 * <pre>
	 * 发送用户注册激活邮件
	 * </pre>
	 * @param url 原始URL(如:http://www.81666.net/registerActivate)
	 * @param storeId 会员店ID
	 * @param betCardNo 投注卡号
	 * @param username 注册用户名
	 * @param email 用户email
	 * @return
	 */
	public boolean sendRegisterActive(String url, String storeId, String betCardNo, String username, String email);

	/**
	 * 发送邮箱验证邮件
	 * @param url 原始URL(如:http://www.81666.net/findPassActivate)
	 * @param username 用户名
	 * @param email 用户email
	 * @param returnUrl 返回url
	 * @param type 验证码类型
	 * @return
	 */
	public ResponseMessage sendValidEmail(String url,String username,
			String email,String activeCode, String successUrl,String errorUrl, VerifyType type);
	
//	public ResponseMessage sendActiveEmail(String url,String username,
//			String email,String activeCode, String returnUrl, VerifyType type);

	/**
	 * 邮箱验证邮件确认
	 * @param request
	 * @return
	 */
	public ResponseMessage confirmEmailForValid(SendEmailRequest request);

	
	/**
	 * <pre>
	 *  取消邮件订阅
	 * </pre>
	 * @param betCardNo
	 * @return
	 */
	public ResponseMessage cancelSubscribe(String betCardNo);

}
